package com.mutual.assistance.task.service;

import com.mutual.assistance.response.PageParams;
import com.mutual.assistance.response.PageResult;
import com.mutual.assistance.task.model.dto.*;
import com.mutual.assistance.task.model.po.TaskAuditPO;
import com.mutual.assistance.task.model.vo.*;

/**
 * @author chenyuxin
 * @version 1.0
 * @description 任务发布相关接口
 * @date 2023/4/28 16:17
 */
public interface TaskPublish {

    /**
     * @param createTaskParamsVO 创建任务参数
     * @param publishId          发布者id
     * @description 新建一个任务
     * @author chenyuxin
     * @date 2023/4/28 21:59
     */
    void createTask(CreateTaskParamsVO createTaskParamsVO, String publishId);

    /**
     * @param revokePreTaskParamsVO 任务与用户id
     * @description 删除发布任务
     * @author chenyuxin
     * @date 2023/4/30 12:30
     */
    void revokeTask(TaskParamsVO revokePreTaskParamsVO);


    /**
     * @param revokePreTaskParamsVO 前端传入参数
     * @return 任务相关参数
     * @description 用户获取一条任务信息用于修改
     * @author chenyuxin
     * @date 2023/4/30 15:18
     */
    TaskPrePublishPersonDTO getOnePreTask(TaskParamsVO revokePreTaskParamsVO);

    /**
     * @param auditPrePublishTask 过滤条件
     * @return 审核任务信息
     * @description 管理员获取所有需要审核任务
     * @author chenyuxin
     * @date 2023/4/30 15:25
     */
    PageResult<TaskPrePublishDTO> getAllTaskToAudit(PageParams pageParams, AuditPrePublishTask auditPrePublishTask);

    /**
     * @param pageParams 分页参数
     * @return 审核任务信息
     * @description 管理员获取所有需要审核任务
     * @author chenyuxin
     * @date 2023/4/30 15:25
     */
    PageResult<TaskPrePublishDTO> getAllTaskToAuditCache(PageParams pageParams);

    /**
     * @param taskAuditPO 管理员审核相关参数
     * @description 管理员审核任务
     * @author chenyuxin
     * @date 2023/4/30 22:16
     */
    void auditPreTask(TaskAuditPO taskAuditPO);

    /**
     * @description 删除未审核或者预审核失败的预发布表
     * @param taskParamsVO 用户id与任务id
     * @author chenyuxin
     * @date 2023/5/1 21:22
    */
    void userDeletePreTask(TaskParamsVO taskParamsVO);

    /**
     * @description 更新预发布表
     * @param updatePreTaskParamsVO 更新参数
     * @param userId 用户id
     * @author chenyuxin
     * @date 2023/5/1 22:11
    */
    void updatePreTask(UpdatePreTaskParamsVO updatePreTaskParamsVO, String userId);

    /**
     * @description 编辑已发布任务下架
     * @param taskParamsVO 用户id与任务id
     * @author chenyuxin
     * @date 2023/5/2 0:17
    */
    void editDown(TaskParamsVO taskParamsVO);

    /**
     * @description 分页获取用户预发布信息
     * @param userId 用户id
     * @param pageParams 分页参数
     * @return 所有预发布信息
     * @author chenyuxin
     * @date 2023/5/2 11:27
    */
    PageResult<TaskPrePublishPersonDTO> getUserAllPreTask(PageParams pageParams, String userId);


    /**
     * @description 获取所有发布任务
     * @param pageParams 分页参数
     * @param taskFilterParamsVO 过滤参数
     * @return 发布任务信息
     * @author chenyuxin
     * @date 2023/5/2 13:08
    */
    PageResult<TaskPublishDTO> queryAllTask(PageParams pageParams, TaskFilterParamsVO taskFilterParamsVO);

    /**
     * @description 获取所有任务排序
     * @param pageParams 分页参数
     * @param taskOrderParamsVO 排序字段
     * @return 发布任务
     * @author chenyuxin
     * @date 2023/5/2 20:08
    */
    PageResult<TaskPublishDTO> queryAllTaskByOrder(PageParams pageParams, TaskOrderParamsVO taskOrderParamsVO);

    /**
     * @description 定时任务处理超时未接收的任务，与任务超时未完成的任务
     *
     * @author chenyuxin
     * @date 2023/5/3 12:19
    */
    void scheduledDeleteExpireTask();

    /**
     * @description 用户接收任务
     * @param acceptTaskParamsVO 任务相关参数
     * @author chenyuxin
     * @date 2023/5/3 19:57
    */
    void acceptAssignment(AcceptTaskParamsVO acceptTaskParamsVO);

    /**
     * @description 分页获取已发布任务缓存
     * @param pageParams 分页参数
     * @param type 任务类型
     * @return 已发布任务信息
     * @author chenyuxin
     * @date 2023/5/3 23:18
    */
    PageResult<TaskPublishDTO> queryAllTaskCache(PageParams pageParams, String type);

    /**
     * @description 为任务添加评论
     * @param addTaskCommentParamsVO 评论相关参数
     * @author chenyuxin
     * @date 2023/5/4 1:18
    */
    void addCommentForTask(AddTaskCommentParamsVO addTaskCommentParamsVO);

    /**
     * @description 为非问答任务进行确实完成提交
     * @param finishTaskVO 评价相关参数
     * @param publisher 发布者名称
     * @author chenyuxin
     * @date 2023/5/5 17:22
    */
    void finishTask(FinishTaskVO finishTaskVO, String publisher);

    /**
     * @description 用户删除评论
     * @param taskCommentVO 评论相关参数
     * @author chenyuxin
     * @date 2023/5/5 21:51
    */
    void deleteTaskComment(TaskCommentVO taskCommentVO);

    /**
     * @description 修改评论信息
     * @param updateCommentParamsVO 修改评论相关信息
     * @param username 用户名称
     * @author chenyuxin
     * @date 2023/5/5 22:19
    */
    void updateComment(UpdateCommentParamsVO updateCommentParamsVO, String username);

    /**
     * @description 获取所有评论信息
     * @param pageParams 分页参数
     * @param taskCommentVO 评论相关信息
     * @return 评论相关信息
     * @author chenyuxin
     * @date 2023/5/5 22:34
    */
    PageResult<CommentDTO> getTaskCommentCache(PageParams pageParams, TaskCommentVO taskCommentVO);

    /**
     * @description 通过过滤参数获取任务信息
     * @param pageParams 分页参数
     * @param commentFilterParamsVO 过滤条件
     * @return 评论相关信息
     * @author chenyuxin
     * @date 2023/5/5 22:57
    */
    PageResult<CommentDTO> getTaskCommentAll(PageParams pageParams, CommentFilterParamsVO commentFilterParamsVO);

    /**
     * @description 提交问答类任务
     * @param finishTaskVO 完成的参数
     * @param publisher 发布者username
     * @author chenyuxin
     * @date 2023/5/6 17:35
    */
    void finishQuestTask(FinishQuestTaskVO finishTaskVO, String publisher);


    /**
     * @description 获取用户历史表内容
     * @param pageParams 分页参数
     * @param taskHistoryFilterParamsVO 过滤条件
     * @param publisher 发布者
     * @return 历史任务与评论
     * @author chenyuxin
     * @date 2023/5/6 18:48
    */
    PageResult<TaskHistoryDTO> getTaskHistory(
            PageParams pageParams,
            TaskHistoryFilterParamsVO taskHistoryFilterParamsVO,
            String publisher,
            String recipient
    );

    /**
     * @description 接收者获取已经接收任务
     * @param pageParams 分页参数
     * @param recipient 接受者
     * @return 任务相关信息
     * @author chenyuxin
     * @date 2023/5/6 21:52
    */
    PageResult<TaskPublishDTO> queryAllAcceptedTask(PageParams pageParams, String recipient);

    /**
     * @description 获取用户已经发布任务信息
     * @param pageParams 分页参数
     * @param publisher 用户名
     * @return 接收任务信息
     * @author chenyuxin
     * @date 2023/5/15 19:28
    */
    PageResult<TaskPublishDTO> queryAllAcceptTask(PageParams pageParams, String publisher);

}
